﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Recursos.Model
{
    public class PeriodoModel
    {
        public IList<Periodo> CargarPeriodo()
        {
            var datacontext = new DataClassesRecursosDataContext();
            var periodo = new Repository<Periodo>(datacontext);
            return periodo.GetAll().ToList();
        }

        public bool EliminarPeriodo(int idperiodo)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var periodo = new Repository<Periodo>(datacontext);
            var seleccionado = periodo.GetById(idperiodo);
            bool conflicto = false;
            var reservaciones = new Repository<Reservacion>(datacontext).SearchFor(s=>s.IdPeriodo==idperiodo && s.Borrado==false);
            if (reservaciones.Count() > 0)
                conflicto = true;
            else
            {
                periodo.Delete(idperiodo);
                datacontext.SubmitChanges();
            }

            return conflicto;
        }


        public bool ActualizarPeriodo(int idperiodo,int año,DateTime fechainicio,DateTime fechafinal,int diashabiles,int periodo1, int modalidad)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var periodo = new Repository<Periodo>(datacontext);
            bool conflicto = false;
            try
            {
                var duplicado = periodo.SearchOne(s => s.NumeroPeriodo == periodo1 && s.IdTipo == modalidad && s.Año == año && s.Borrado == false );

                if (duplicado.id != idperiodo)
                    conflicto = true;
                else
                {
                    duplicado.Año = año;
                    duplicado.DiasHabiles = diashabiles;
                    duplicado.FechaFinal = fechafinal;
                    duplicado.FechaInicio = fechainicio;
                    duplicado.IdTipo = modalidad;
                    duplicado.NumeroPeriodo = periodo1;
                    datacontext.SubmitChanges();
                }

                return conflicto;
            }
            catch (Exception)
            {
                var duplicado = periodo.GetById(idperiodo);
                duplicado.Año = año;
                duplicado.DiasHabiles = diashabiles;
                duplicado.FechaFinal = fechafinal;
                duplicado.FechaInicio = fechainicio;
                duplicado.IdTipo = modalidad;
                duplicado.NumeroPeriodo = periodo1;
                datacontext.SubmitChanges();
            }
            return conflicto;
                
        }


        public bool CrearPeriodo(DateTime fechainicio, DateTime fechafinal,int año,int numero,int idtipo,int dias)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var periodo = new Repository<Periodo>(datacontext);

            try
            {

                var encontrado=RetornarPeriodo(año, numero, idtipo);
                if (encontrado != 0)
                    return false;
                var periodonuevo = new Periodo();
                periodonuevo.Año = año;
                periodonuevo.Borrado = false;
                periodonuevo.DiasHabiles = dias;
                periodonuevo.FechaFinal = fechafinal;
                periodonuevo.FechaInicio = fechainicio;
                periodonuevo.IdTipo = idtipo;
                periodonuevo.NumeroPeriodo = numero;
                periodo.Insert(periodonuevo);
                datacontext.SubmitChanges();
                return true;
               
            }
            catch (Exception)
            {
                
                return false;
                
            }
        }



        public Periodo CargarPorId(int id)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var periodo = new Repository<Periodo>(datacontext);
            return periodo.GetById(id);
        }
        public bool ComprobarPeriodo(int año,int period,int modalidad)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var periodo = new Repository<Periodo>(datacontext);
            var resultado=  periodo.SearchOne(s => s.Año == año && s.NumeroPeriodo == period && s.IdTipo == modalidad && s.Borrado == false);
            if (resultado!=null)
                return true;
            else
                return false;
        }
        public int RetornarPeriodo(int año, int period, int modalidad)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var periodo = new Repository<Periodo>(datacontext);
            var resultado = periodo.SearchOne(s => s.Año == año && s.NumeroPeriodo == period && s.IdTipo == modalidad && s.Borrado == false);
            if (resultado != null)
                return resultado.id;
            else
                return 0;
           
        }
    }
}